//
// Created by wxd on 2025/7/6.
// 用于解决中文乱码问题
//

#pragma once

#include <windows.h>


// ChineseOutput.hpp
#pragma once
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>

#ifdef _WIN32
    #include <windows.h>
#endif

namespace ChineseOutput {
    // 初始化环境（需在程序启动时调用一次）
    inline void init() {
#ifdef _WIN32
        SetConsoleOutputCP(CP_UTF8); // 设置控制台输出为 UTF-8
        std::locale::global(std::locale("")); // 使用系统默认 locale
#else
        std::locale::global(std::locale("en_US.UTF-8")); // Linux/macOS 设置 UTF-8
#endif
    }

    // 输出中文（支持 std::string 和 std::wstring）
    template<typename T>
    inline void print(const T& str) {
#ifdef _WIN32
        if constexpr (std::is_same_v<T, std::string>) {
            std::cout << str;
        } else if constexpr (std::is_same_v<T, std::wstring>) {
            std::wcout << str;
        }
#else
        if constexpr (std::is_same_v<T, std::string>) {
            std::cout << str;
        } else if constexpr (std::is_same_v<T, std::wstring>) {
            std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
            std::cout << converter.to_bytes(str);
        }
#endif
    }

    // 宏简化调用（直接支持字符串字面量）
#define PRINT_CN(str) ChineseOutput::print(str)
}